﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ETRobocon.RaceTraking.GamePresentation
{
    /// <summary>
    /// UserControlTeamNameAnimation.xaml の相互作用ロジック
    /// </summary>
    public partial class UserControlTeamNameAnimation : UserControl
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public UserControlTeamNameAnimation()
        {
            InitializeComponent();
        }

        /// <summary>
        /// チーム名、ターン数、ラウンド数の更新
        /// </summary>
        public void UpdateInformation(String inTeamName, String outTeamName, int turn, int round)
        {
            // 情報更新！
            this.TextInTeamName.Text = inTeamName;                       // インコースチーム名
            this.TextOutTeamName.Text = outTeamName;                     // アウトコースチーム名
            this.TextTurn.Text = String.Format("TURN {0,2}", turn);      // ターン数
            this.TextRound.Text = String.Format("ROUND {0,1}", round);   // ラウンド数

            // 文字数に応じて、チーム名の最終的なフォントサイズを決定する
            Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");        // 大文字、小文字で区別するために使用
            int inTeamNameLength = sjisEnc.GetByteCount(inTeamName);     // インチーム名の文字数
            int outTeamNameLength = sjisEnc.GetByteCount(outTeamName);   // アウトチーム名の文字数
            // フォントサイズの決定 (インチーム)
            if (inTeamNameLength <= 20)
            {
                m_InTeamFontSize = 100;     // 通常サイズ
            }
            else if (inTeamNameLength <= 28)
            {
                m_InTeamFontSize = 80;      // 少し小さい
            }
            else
            {
                m_InTeamFontSize = 60;      // 小さいサイズ
            }
            // フォントサイズの決定 (アウトチーム)
            if (outTeamNameLength <= 20)
            {
                m_OutTeamFontSize = 100;    // 通常サイズ
            }
            else if (outTeamNameLength <= 28)
            {
                m_OutTeamFontSize = 80;     // 少し小さいサイズ
            }
            else
            {
                m_OutTeamFontSize = 60;     // 小さいサイズ
            }
        }

        /// <summary>
        /// アニメーション開始
        /// </summary>
        public void BeginAnimation()
        {
            BeginStoryboard(IntroductionStoryboard_BeginStoryboard.Storyboard);    // ストーリーボードの開始 (アニメーション内容はxamlに記述)
        }

        /// <summary>
        /// アニメーション終了時のアクション
        /// アニメーション用の画面を隠すアニメーションを行う
        /// </summary>
        private void storyboard_Completed(object sender, EventArgs e)
        {
            var endStoryboard = new Storyboard();      // 終了アニメーション用ストーリボード

            // 横幅
            {
                var animation = new DoubleAnimation
                {
                    From = 1024,
                    To = 0,
                    Duration = TimeSpan.FromMilliseconds(1000)
                };
                Storyboard.SetTargetProperty(animation, new PropertyPath("Width"));
                endStoryboard.Children.Add(animation);
            }
            // 透明度
            {
                var animation = new DoubleAnimation
                {
                    From = 1,
                    To = 0,
                    Duration = TimeSpan.FromMilliseconds(1000)
                };
                Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity"));
                endStoryboard.Children.Add(animation);
            }

            NameAnimation.BeginStoryboard(endStoryboard);      // 終了アニメーションの開始！
        }


        //-------------
        // メンバ変数
        //-------------
        private int m_InTeamFontSize = 0;       // インコース走行チームのフォントサイズ
        private int m_OutTeamFontSize = 0;      // アウトコース走行チームのフォントサイズ
    }
}
